﻿Imports Microsoft.Reporting.WinForms

Public Class Factura

    Public idHija As Integer
    Private oFact As New CFacturacion
    Public subTotal1 As Double
    Public subTotal2 As Double
    Public totalIVA As Double
    Public total As Double
    Public totalMoneda2 As Double
    Public totalMoneda1 As Double
    Public granTotalMaritimo As Double
    Public alCambioMaritimo As String


    Private Sub Factura_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Llena el dataset para mostrar la factura
        Dim ds As New DataSet
        ds = Me.oFact.GetInfoFactura(Me.idHija)
        If (ds.Tables(0).Rows.Count > 0) Then
            'En la columna PESO guarda la informacion a mostrar en la factura
            Dim peso As String = ""
            Select Case ds.Tables(0).Rows(0)("FACTURAPOR")
                Case "PESO"
                    peso = ds.Tables(0).Rows(0)("PESO") & " " & ds.Tables(0).Rows(0)("UNIDADPESO")
                Case "VOLUMEN"
                    peso = ds.Tables(0).Rows(0)("VOLUMEN") & " m3"
                Case "CONTENEDORES"
                    peso = ds.Tables(0).Rows(0)("NUMEROCONTENEDORES") & " contenedores de " & ds.Tables(0).Rows(0)("TIPOCONTENEDOR")
            End Select
            ds.Tables(0).Rows(0)("FACTURAPOR") = peso

            'Si la moneda a totalizar es diferente a dolares se muestra el cambio y el total en la moneda correspondiente
            ds.Tables(0).Rows(0)("ALCAMBIO") = ""            
            If (ds.Tables(0).Rows(0)("IDMONEDA").ToString <> My.Settings.USD) Then
                'Trae el cambio entre la moneda y los dolares
                Dim cambio As Double = 1
                Dim seDivide As Boolean = True
                cambio = Me.oFact.GetCambio(CInt(My.Settings.USD), CInt(ds.Tables(0).Rows(0)("IDMONEDA").ToString), CUtil.ConvertirFecha(ds.Tables(0).Rows(0)("FECHA").ToString))
                'Si no se encontro el cambio se busca con las monedas cambiadas
                If (cambio = 0) Then
                    seDivide = False
                    cambio = Me.oFact.GetCambio(CInt(ds.Tables(0).Rows(0)("IDMONEDA").ToString), CInt(My.Settings.USD), CUtil.ConvertirFecha(ds.Tables(0).Rows(0)("FECHA").ToString))
                End If

                ds.Tables(0).Rows(0)("ALCAMBIO") = "Al cambio " & cambio.ToString & "        " & ds.Tables(0).Rows(0)("MONEDA") & "          " & FormatNumber(Me.totalMoneda2, 2)
            End If

            Dim valoresExportacionAereo As Double = 0
            Dim textoSaldoASuFavor As String = ""

            Me.ReportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local
            Dim rep As LocalReport = Me.ReportViewer1.LocalReport
            'Algunos textos dependen del tipo de transporte
            Select Case ds.Tables(0).Rows(0)("TRANSPORTE").ToString.ToUpper
                Case "AEREO"
                    If (ds.Tables(0).Rows(0)("TIPOCONSOLIDADO").ToString.ToUpper = "EXPORTACION") Then
                        ds.Tables(0).Columns.Add("VALORPROVISION")
                        ds.Tables(0).Columns.Add("ALCAMBIO2")

                        ds.Tables(0).Rows(0)("TEXTO1") = "Factura de fletes aéreos internacionales por cuenta de terceros (Exenta de retención en la fuente según artíulo 8 decreto 2775/83)"
                        'A partir de la factura 38301 cambió la razon social de zaratrans
                        If (CInt(ds.Tables(0).Rows(0)("FACTURA").ToString) >= 38301) Then
                            ds.Tables(0).Rows(0)("TEXTO2") = "Factura de Exportación ZARATRANS S.A.S Nit 860.518.074-1. Lo pagado por ustedes y correspondiente a nuestra factura será declarado por ZARATRANS S.A.S como ingresos recibidos de sus clientes"
                        Else
                            ds.Tables(0).Rows(0)("TEXTO2") = "Factura de Exportación ZARATRANS S.A.S. Nit 860.518.074-1. Lo pagado por ustedes y correspondiente a nuestra factura será declarado por ZARATRANS S.A.S. como ingresos recibidos de sus clientes"
                        End If

                        ds.Tables(0).Rows(0)("TEXTOMBL") = ""

                        'Provision es un porcentaje de la suma de los dos subtotales y no puede ser menor al minimo definido
                        ds.Tables(0).Rows(0)("VALORPROVISION") = 0
                        If (My.Forms.HijasAereoExportacion.txtProvision.Text <> "") Then
                            If IsNumeric(My.Forms.HijasAereoExportacion.txtProvision.Text) Then
                                ds.Tables(0).Rows(0)("VALORPROVISION") = (CDbl(My.Forms.HijasAereoExportacion.txtProvision.Text) / 100) * (Me.totalMoneda2 - CDbl(ds.Tables(0).Rows(0)("ANTICIPO")))
                            End If
                            'Si existe valor minimo para la provisión
                            If (My.Forms.HijasAereoExportacion.txtMinimoProvision.Text <> "") Then
                                If IsNumeric(My.Forms.HijasAereoExportacion.txtMinimoProvision.Text) Then
                                    If (CDbl(ds.Tables(0).Rows(0)("VALORPROVISION").ToString) < CDbl(My.Forms.HijasAereoExportacion.txtMinimoProvision.Text)) Then
                                        ds.Tables(0).Rows(0)("VALORPROVISION") = CDbl(My.Forms.HijasAereoExportacion.txtMinimoProvision.Text)
                                    End If
                                End If
                            End If
                        End If

                        ds.Tables(0).Rows(0)("ANTICIPO") = ds.Tables(0).Rows(0)("ANTICIPO").ToString * (-1)
                        ds.Tables(0).Rows(0)("ALCAMBIO2") = "GRAN TOTAL " & ds.Tables(0).Rows(0)("MONEDA") & "          " & FormatNumber(Me.totalMoneda1, 2)

                        'Texto de saldo a favor o en contra, dependiendo del total
                        If (CInt(Me.totalMoneda1) >= 0) Then
                            textoSaldoASuFavor = "SALDO A SU CARGO"
                        Else
                            textoSaldoASuFavor = "SALDO A SU FAVOR"
                        End If

                        rep.ReportEmbeddedResource = "Facturacion.ExportacionAereo.rdlc"
                    Else
                        ds.Tables(0).Rows(0)("TEXTO1") = "Factura de fletes aéreos internacionales por cuenta de terceros (Exenta de retención en la fuente según artíulo 8 decreto 2775/83)"
                        'A partir de la factura 38301 cambió la razon social de zaratrans
                        If (CInt(ds.Tables(0).Rows(0)("FACTURA").ToString) >= 38301) Then
                            ds.Tables(0).Rows(0)("TEXTO2") = "Factura de Importación ZARATRANS S.A.S Nit 860.518.074-1. Lo pagado por ustedes y correspondiente a nuestra factura será declarado por ZARATRANS S.A.S como ingresos recibidos de sus clientes"
                        Else
                            ds.Tables(0).Rows(0)("TEXTO2") = "Factura de Importación ZARATRANS S.A.S. Nit 860.518.074-1. Lo pagado por ustedes y correspondiente a nuestra factura será declarado por ZARATRANS S.A.S. como ingresos recibidos de sus clientes"
                        End If

                        ds.Tables(0).Rows(0)("TEXTOMBL") = ds.Tables(0).Rows(0)("MAWB").ToString
                        rep.ReportEmbeddedResource = "Facturacion.ReporteFactura.rdlc"
                    End If

                    'Si la moneda utilziada en los conceptos de terceros es diferente a la de totalizar, se muestra el cambio
                    If (ds.Tables(1).Rows.Count > 0) Then
                        If (ds.Tables(1).Rows(0)("IDMONEDA").ToString <> My.Settings.USD) Then
                            'Trae el cambio entre la moneda y los dolares
                            Dim cambio As Double = 1
                            Dim seDivide As Boolean = True
                            cambio = Me.oFact.GetCambio(CInt(My.Settings.USD), CInt(ds.Tables(1).Rows(0)("IDMONEDA").ToString), CUtil.ConvertirFecha(ds.Tables(0).Rows(0)("FECHA").ToString))
                            'Si no se encontro el cambio se busca con las monedas cambiadas
                            If (cambio = 0) Then
                                seDivide = False
                                cambio = Me.oFact.GetCambio(CInt(ds.Tables(1).Rows(0)("IDMONEDA").ToString), CInt(My.Settings.USD), CUtil.ConvertirFecha(ds.Tables(0).Rows(0)("FECHA").ToString))
                            End If

                            ds.Tables(0).Rows(0)("ALCAMBIOTERCEROS") = "Al cambio " & cambio.ToString
                        End If
                    End If

                Case "MARITIMO"
                    ds.Tables(0).Columns.Add("VALORPROVISION")                    

                    ds.Tables(0).Rows(0)("TEXTO1") = "Factura de fletes marítimos internacionales por cuenta de terceros"
                    ds.Tables(0).Rows(0)("TEXTO2") = "Factura de EXITRANS S.A.S. Nit 830.111.681-3. Lo pagado por ustedes correspondiente a nuestra factura será declarado por EXITRANS S.A.S. como ingresos recibidos de sus clientes"
                    ds.Tables(0).Rows(0)("TEXTOMBL") = ds.Tables(0).Rows(0)("MAWB").ToString
                    rep.ReportEmbeddedResource = "Facturacion.ReporteFacturaMaritimo.rdlc"

                    'Si la moneda utilziada en los conceptos de terceros es diferente a la de totalizar, se muestra el cambio
                    If (ds.Tables(1).Rows.Count > 0) Then
                        If (ds.Tables(1).Rows(0)("IDMONEDA").ToString <> My.Settings.USD) Then
                            'Trae el cambio entre la moneda y los dolares
                            Dim cambio As Double = 1
                            Dim seDivide As Boolean = True
                            cambio = Me.oFact.GetCambio(CInt(My.Settings.USD), CInt(ds.Tables(1).Rows(0)("IDMONEDA").ToString), CUtil.ConvertirFecha(ds.Tables(0).Rows(0)("FECHA").ToString))
                            'Si no se encontro el cambio se busca con las monedas cambiadas
                            If (cambio = 0) Then
                                seDivide = False
                                cambio = Me.oFact.GetCambio(CInt(ds.Tables(1).Rows(0)("IDMONEDA").ToString), CInt(My.Settings.USD), CUtil.ConvertirFecha(ds.Tables(0).Rows(0)("FECHA").ToString))
                            End If

                            ds.Tables(0).Rows(0)("ALCAMBIOTERCEROS") = "Al cambio " & cambio.ToString
                        End If
                    End If

                    ds.Tables(0).Rows(0)("VALORPROVISION") = Me.granTotalMaritimo
                    ds.Tables(0).Rows(0)("ALCAMBIO") = Me.alCambioMaritimo

                Case "TERCEROS"
                    'Varios aéreo
                    ds.Tables(0).Rows(0)("TEXTO1") = "Factura de gastos varios por cuenta de terceros"
                    'A partir de la factura 38301 cambió la razon social de zaratrans
                    If (CInt(ds.Tables(0).Rows(0)("FACTURA").ToString) >= 38301) Then
                        ds.Tables(0).Rows(0)("TEXTO2") = "Factura de ZARATRANS S.A.S Nit 860.518.074-1"
                    Else
                        ds.Tables(0).Rows(0)("TEXTO2") = "Factura de ZARATRANS S.A.S. Nit 860.518.074-1"
                    End If

                    ds.Tables(0).Rows(0)("TEXTOMBL") = ds.Tables(0).Rows(0)("MAWB").ToString
                    ds.Tables(0).Rows(0)("ALCAMBIOTERCEROS") = ""
                    rep.ReportEmbeddedResource = "Facturacion.FacturaTerceros.rdlc"
                Case "TERCEROSMARITIMO"
                    'Varios marítimo
                    ds.Tables(0).Rows(0)("TEXTO1") = "Factura de gastos varios por cuenta de terceros"
                    ds.Tables(0).Rows(0)("TEXTO2") = "Factura de EXITRANS LTDA. Nit 830.111.681-3"
                    ds.Tables(0).Rows(0)("TEXTOMBL") = ds.Tables(0).Rows(0)("MAWB").ToString
                    ds.Tables(0).Rows(0)("ALCAMBIOTERCEROS") = ""
                    rep.ReportEmbeddedResource = "Facturacion.FacturaTercerosMaritimo.rdlc"
            End Select

            'Agrega columna para guardar el texto de "Saldo a su favor" o "Saldo a su cargo"
            ds.Tables(0).Columns.Add("SALDOASUFAVOR")
            ds.Tables(0).Rows(0)("SALDOASUFAVOR") = textoSaldoASuFavor

            'Subtotales y totales de plata
            ds.Tables(0).Rows(0)("SUBTOTAL1") = Me.subTotal1
            ds.Tables(0).Rows(0)("SUBTOTAL2") = Me.subTotal2
            ds.Tables(0).Rows(0)("TOTALIVA") = Me.totalIVA
            ds.Tables(0).Rows(0)("TOTAL") = Me.total

            Dim rptDataSource As New ReportDataSource
            rptDataSource.Name = "dsFactura_HIJA"
            rptDataSource.Value = ds.Tables(0)

            Dim rptDsValores As New ReportDataSource
            rptDsValores.Name = "dsFactura_VALORES"
            rptDsValores.Value = ds.Tables(1)

            Dim rptDsConceptos As New ReportDataSource
            rptDsConceptos.Name = "dsFactura_CONCEPTOS"
            rptDsConceptos.Value = ds.Tables(2)

            rep.DataSources.Clear()
            rep.DataSources.Add(rptDataSource)
            rep.DataSources.Add(rptDsValores)
            rep.DataSources.Add(rptDsConceptos)
            Me.ReportViewer1.LocalReport.Refresh()
            Me.ReportViewer1.Visible = True
        End If
        Me.ReportViewer1.RefreshReport()
    End Sub

End Class